草庐IT

c++ - GLUT 和 C++ 类

全部标签

c++ - 什么时候 sizeof(myPOD) 太大而无法在 x64 上按值传递?

我预计对于最大8字节的结构没有什么不同,但是更大的POD类型呢?当类型的大小超过机器字大小时,按值传递是否会变得更昂贵,或者是否有其他因素(如缓存行大小)会影响性能?我主要对x64感兴趣,但也可以随意包含一些x86的数字。说明:我可能想得太狭隘了,因为我不知道在其中发挥作用的所有因素(寄存器、调用约定、编译器优化)。我主要对Microsoft的C++编译器感兴趣,它只使用__fastcall。我感兴趣的是,在了解架构、类型大小、缓存大小等参数传递方面,是否有任何一般性建议。例如:“当类型小于N字节时,最好按值传递类型。“其中N是可以从我们已知的事物中推导出来的事物。

c++ - 将 R 函数作为 C 函数传递给 C

背景我正在编写一个包,在R中针对各种预先指定的目标函数(要优化的函数)实现特定的优化算法。优化代码本身是用C编写的。为了使代码尽可能高效,我还用C重新实现了目标函数。在当前阶段,R的作用是使用.Call为C代码提供接口(interface).目标我希望这个包能够处理任何用户提供的目标函数。但是,我不想从C调用R函数,这会产生大量开销,而且很可能非常慢。我真正想要的是一种将有限类R函数(您通常将其视为统计和机器学习中的成本函数)作为参数传递的方法,将此R函数转换为C函数然后随后用作优化算法中的目标函数。解决思路R与LISP有很强的亲子关系。获取函数的抽象语法树(AST)非常简单。我认为可

c++ - 汇编代码的数据结构? [研究]

我打算创建一个优化的数据结构来保存汇编代码。这样我就可以完全负责将在这个结构上工作的优化算法。如果我可以边运行边编译。这将是一种动态执行。这可能吗?有没有人见过这样的事情?我应该使用结构将结构链接到程序流中吗?对象更好吗?structasm_code{inttype;intvalue;intoptimized;asm_code*next_to_execute;}asm_imp;更新:我想它会变成一个链表。更新:我知道还有其他编译器。但这是军方的绝密项目。所以我们不能相信任何代码。我们必须自己做这一切。更新:好的,我想我会生成基本的i386机器代码。但是当它完成时我如何跳入我的内存blo

c++ - 返回值存储在哪里?

我知道用C编码,函数的返回值使用%eax寄存器返回给调用者。使用C++还可以返回结构而不仅仅是“原始”类型,因此当函数返回结构时,返回值存储在哪里(堆栈、堆等)?示例代码:classStudent{private:intm_id;public:Student(intid){m_id=id;};~Student();intgetId(){returnm_id;};};StudentmyFunc(){returnStudent(123);}intmain(){//Howdoes'student1'getthevaluefromthefunction?//Does'myFunc'writed

c++ - 在 C/C++ 中的特定地址边界上对齐内存是否仍能提高 x86 性能?

许多低延迟开发指南讨论了在特定地址边界上对齐内存分配:https://github.com/real-logic/simple-binary-encoding/wiki/Design-Principles#word-aligned-accesshttp://www.alexonlinux.com/aligned-vs-unaligned-memory-access但是,第二个链接是2008年的。在地址边界上对齐内存是否仍然在2019年为IntelCPU提供性能提升?我认为英特尔CPU不再会因访问未对齐的地址而导致延迟损失?如果不是,在什么情况下应该这样做?我应该对齐每个堆栈变量吗?类成

c++ - 全局变量是如何存储的?

据我所知,有两种类型的全局变量,已初始化和未初始化。它们是如何储存的?它们都存储在可执行文件中吗?我可以想到将初始化的全局变量的初始值存储在可执行文件中。但是未初始化的需要存储什么?我目前的理解是这样的:可执行文件被组织成几个部分,例如.text、.data和.bss。代码存储在.text段中,初始化的全局或静态数据存储在.data段中,未初始化的全局或静态数据存储在.bss段中。感谢您花时间查看我的问题。更新1-2010年11月3日上午9:56我在这里找到了一个很好的引用:SegmentsinAssemblyLanguageSource-Buildingthetextanddatas

c++ - Objective-C 枚举错误?

我在类头的顶部定义了一个枚举:enumPresetSeq{kSeqClear=0,kSeqAllBeats,kSeqAllTicks};但是当我尝试使用枚举为该类声明一个方法时。-(void)quickSetSeq:(PresetSeq)patternforChannel:(long)ch;我收到错误:在“PresetSeq”之前应有“)”如果我改用typedef枚举:typedefenum{kSeqClear=0,kSeqAllBeats,kSeqAllTicks}PresetSeq;然后编译器很高兴,但我不记得在C/C++中必须这样做。在Obj-C中枚举必须是typedef吗?谢谢

c++ - C 与 C++ 的数值模拟(性能)

我即将编写一个离格扩散受限聚合(DLA)模拟,我想知道是使用C还是C++。出于设计原因,C++会很好,但我想知道C是否会执行得更好。我当然知道算法的性能,并选择了最好的算法。所以我不是在谈论将O(n^2)改进为O(logn)或类似的东西。可以这么说,我正在尝试减少常数。如果您不知道DLA,它基本上可以归结为拥有一个double组(大小在10^3和10^6之间),并在一个循环中选择随机double来比较(大于/小于)大部分数组。因此,对此重要的性能差异是数据访问和调用函数:数据访问:C结构与具有公共(public)数据成员的C++类与具有私有(private)数据成员和访问器的C++类。

c++ - static 关键字会影响作用域吗?

在C89中,static关键字会影响作用域吗?我的软件负责人告诉我:"Avariablemarkedstaticatthetopofafiledoesn'ttechnicallyhaveglobalscopeanylonger.Staticisascopequalifieraswellasastoragekeyword.Scopeisaconceptthatcoversvisibilityofsymbols,thoughvisibilityisautomaticallycompiledtohavestoragedurationintrinsicallytiedinbyalmostall

c++ - 为什么我应该在 c++ 而不是 c 中设置插件接口(interface)

由于我的previousquestions我问自己:为插件系统设置C++接口(interface)是否有用?以下几点反对它:不同编译器及其版本之间没有共同的ABI,内存中的对象没有共同的布局没有直接类导出。您必须导出工厂和析构函数。如果你的对象被其他对象持有,问题就会出现delete它们,例如智能指针。STL的不同实现,你不能传递std::list到插件使用不同版本的库,例如Boost如果您将自己限制在C++语言的其余部分,您几乎会以“C子集”告终。使用C++有什么要点吗?Qt-Toolkit是如何解决上述问题的?备注:我主要指的是Linux系统。不过,我对其他平台上的解决方案很感兴趣